<?php

/**
 * Classe responsável por realizar a persistência dos dados
 *
 * Esta realiza rotinas relacionadas ao banco de dados tais como CRUD
 *
 * @author  Bruno Pulis <bruno.pulis@gmail.com>
 * @package Model/DAO
 */

class FiliacaoDAO extends ConnectionPDO {
    public $connection = null;
    public function __construct()
    {
      $this->connection = ConnectionPDO::Connect();
    }

    /**
     * Método para inserir um novo cliente
     *
     * @author Bruno Pulis <bruno.pulis@gmail.com>
     * @param Filiacao $filiacao
    */
    public function addFiliacao(Filiacao $filiacao) {
        try {
            $sql = 'INSERT INTO filiacao(pai,mae) VALUES(?,?)';
            $rs = $this->connection->prepare($sql);

            $rs->bindParam(1, $filiacao->getNomePai(), PDO::PARAM_STR, 45);
            $rs->bindParam(2, $filiacao->getNomeMae(), PDO::PARAM_STR, 45);
            $rs->execute();
        } catch (PDOException $e) {
            echo "Erro <code>" . $e->getMessage() . "</code>";
        }
    }

    /**
     * Metodo responsavel por listar todos registros
     *
     * @author Bruno Pulis <bruno.pulis@gmail.com>
     */
    public function getAll()
    {
        try {
            $sql = 'SELECT IDFiliacao,pai,mae FROM filiacao';
            return $rs = $this->connection->query($sql);
            $this->connection = null;
        } catch (PDOException $e) {
            $this->connection->rollBack();
            echo "Erro <code>" . $e->getMessage() . "</code>";
        }
    }

    /**
     * Metodo responsavel por listar todos registros
     * @author Bruno Pulis <bruno.pulis@gmail.com>
     */
    public function getByIDFiliacao($idFiliacao)
    {
        try {
            $sql = 'SELECT pai,mae FROM Filiacao WHERE IDFiliacao = ?';
            $stmt = $this->connection->prepare($sql);

            if ($stmt->execute(array($idFiliacao)))
            {
                while ($row = $stmt->fetch())
                {
                  $values = new Filiacao();
                  $values->setNomePai($row['pai']);
                  $values->setNomeMae($row['mae']);
                }
            }
            return $values;
        } catch (PDOException $e) {
            echo "Erro <code>" . $e->getMessage() . "</code>";
        }
    }

    /**
     * Método responsável por atualizar registros
     * @author Bruno Pulis <bruno.pulis@gmail.com>
     */
    public function updateFiliacao(Filiacao $filiacao)
    {
        try {
            $sql = 'UPDATE filiacao SET pai = ?, mae = ? WHERE IDFiliacao  = ?';
            $stmt = $this->connection->prepare($sql);

            $stmt->bindValue(1, $filiacao->getIdFiliacao());
            $stmt->bindValue(2, $filiacao->getNomePai());
            $stmt->bindValue(3, $filiacao->getNomeMae());
            $stmt->execute();
        } catch (PDOException $e) {
            echo "Erro <code>" . $e->getMessage() . "</code>";
        }
    }

    /**
     * Método responsável por atualizar registros
     */
    public function deleteFiliacao(Filiacao $filiacao)
    {
        try {
            $sql = 'DELETE FROM filiacao WHERE IDFiliacao = ?';
            $db = $this->connection->prepare($sql);
            $db->bindParam(1, $filiacao->getIdFiliacao(),PDO::PARAM_INT);
            $db->execute();
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }
}